/*!
* 文件名     main.c
* 作者       聚沃科技
* 版本       V1.0
* 实验简介   EXMC-外部SRAM读写实验
*/

/*
* 版权说明
* 本程序只供学习使用，未经作者许可，不得用于其它任何用途
* GD32F303东方红开发板V1
* 在线购买：   http://juwo.taobao.com
* 技术交流：   http://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* 创建日期:    2023/8/30
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "app_key.h"

#include "bsp_led.h"
#include "bsp_rgb_pwm.h"
#include "bsp_key.h"
#include "bsp_adc.h"

#include "driver_public.h"

#include "FreeRTOS.h"
#include "task.h"


//#define INIT_TASK_PRIO   ( tskIDLE_PRIORITY + 1 )
//#define DISPLAY_TASK_PRIO    ( tskIDLE_PRIORITY + 3 )

#define TEST_TIMEOUT_MS 5000


/*!
    \brief      init task
    \param[in]  pvParameters not used
    \param[out] none
    \retval     none
*/
Drv_Err key_test(void)
{    
    uint8_t flag=0x0f;
    uint64_t timeout = driver_tick;
    KEY1.press_timerms=PRESS_NONE; 
    KEY2.press_timerms=PRESS_NONE;                
    WKUP_KEY.press_timerms=PRESS_NONE;                
    ROCKER_KEY.press_timerms=PRESS_NONE; 
    
    while(flag!=0)
    {
        /* 检测任意按键按下时长 */
        if(KEY1.press_timerms >= PRESS_50MS)
        {
            flag&=~BIT(0);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);            
            KEY1.press_timerms=PRESS_NONE;                
//            printf_log("  #KEY1 press briefly.\r\n");
            bsp_rgb_duty_set(50,0,0);  
        }            
        if(KEY2.press_timerms >= PRESS_50MS)
        {
            flag&=~BIT(1);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            KEY2.press_timerms=PRESS_NONE;                
//            printf_log("  #KEY2 press briefly.\r\n");
            bsp_rgb_duty_set(0,50,0);
        } 
        if(WKUP_KEY.press_timerms >= PRESS_50MS)
        {
            flag&=~BIT(2);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            WKUP_KEY.press_timerms=PRESS_NONE;                
//            printf_log("  #WKUP_KEY press briefly.\r\n");
            bsp_rgb_duty_set(0,0,50);
        } 
        /* 检测任意按键按下时长 */
        if(ROCKER_KEY.press_timerms >= PRESS_50MS)
        {
            flag&=~BIT(3);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            ROCKER_KEY.press_timerms=PRESS_NONE;                
//            printf_log("  #ROCKER_KEY press briefly.\r\n");
            bsp_rgb_duty_set(50,50,50);  
        }
        if((timeout+TEST_TIMEOUT_MS) <= driver_tick) {              
            return DRV_ERROR;
        }         
    }
    return DRV_SUCCESS;
}


/*!
    \brief      init task
    \param[in]  pvParameters not used
    \param[out] none
    \retval     none
*/
Drv_Err rocker_test(void)
{    
    uint8_t flag=0x0f;
    uint64_t timeout = driver_tick;
    
    while(flag!=0)
    {
        if(Rocker_data[0] >= 0xfff*0.7f)
        {
            flag&=~BIT(0);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);            
        }            
        if(Rocker_data[1] >= 0xfff*0.7f)
        {
            flag&=~BIT(1);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            KEY2.press_timerms=PRESS_NONE;                
            bsp_rgb_duty_set(0,50,0);
        } 
        if(Rocker_data[0] <= 0xfff*0.3f)
        {
            flag&=~BIT(2);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            WKUP_KEY.press_timerms=PRESS_NONE;                
        } 
        if(Rocker_data[1] <= 0xfff*0.3f)
        {
            flag&=~BIT(3);
            bsp_led_toggle(&LED0);
            bsp_led_toggle(&LED1);              
            ROCKER_KEY.press_timerms=PRESS_NONE;                
        }
        if((timeout+TEST_TIMEOUT_MS) <= driver_tick) {              
            return DRV_ERROR;
        }         
    }
    return DRV_SUCCESS;
}

/*!
* 说明     main函数
* 输入     无
* 输出     无
* 返回值   无
*/
//void display_task(void * pvParameters)
//{    
//    uint64_t tick_temp=0;
//    uint16_t frames_speed=0;    
//    //计算刷整屏速度
//    tick_temp=driver_tick;
//    bsp_lcd_clear(WHITE);
//    frames_speed=driver_tick-tick_temp;
//    
//    //显示log图片
//    bsp_lcd_color_fill(60,0,233,99,(uint16_t*)gImage_log_picture);
//    
//    //设置打印窗口
//    bsp_lcd_printf_init(10,109,bsp_lcd_parameter.width-1,369,FONT_ASCII_24_12,WHITE,BLUE);
//    
//    //打印到LCD    
//    bsp_lcd_printf("GD32F303ZGT6\r\n");
//    bsp_lcd_printf("EXMC LCD Brush Test\r\n");
//    bsp_lcd_printf("LCD ID:%04X\r\n", bsp_lcd_parameter.id);    
//    bsp_lcd_printf("* Suzhou Juwo Electronic\r\n");
//    bsp_lcd_printf("* web: www.gd32bbs.com\r\n");
//    bsp_lcd_printf("* B station: 475462605\r\n");
//    bsp_lcd_printf("* QQ Group: 859440462\r\n");
//    bsp_lcd_printf("* Taobao: juwo.taobao.com\r\n");
//    bsp_lcd_printf("* Official ID: gd32bbs\r\n");        
//    bsp_lcd_printf("frames brush:%d ms\r\n", frames_speed);   

//    //重新设置新的打印窗口
//    bsp_lcd_printf_init(0,370,bsp_lcd_parameter.width-1,bsp_lcd_parameter.height-1,FONT_ASCII_12_6,BLUE,~BLUE);

//    while (1)
//    {
//        //将摇杆采集结果处理控制LCD亮度
//        bsp_lcd_backlight_duty_set(100-(0xfff-Rocker_data[0])*100/0xfff);
//        
//        //打印亮度信息到LCD
//        bsp_lcd_printf("* backlight is %d",100-(0xfff-Rocker_data[0])*100/0xfff); 
//        bsp_lcd_printf("      ");
//        //打印系统tick到LCD
//        bsp_lcd_printf("* system tic is %lld \r\n",driver_tick);    
//        vTaskDelay(200);                                                  
//    }
//}

